/**
 * TS实现可选的
 */

/**
 * 文章接口类型
 */
interface Article {
  title: string; // 标题
  content: string; // 内容
  author: string; // 作者
  date: Date; // 日期
  readCount: number; // 阅览量
}

/**
 * 可选的工具
 * Omit是剔除T中除以K
 * Pick是选择T中K
 * Partial把所有的变成可选的
 */
type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

/**
 * 把指定的字段变为可选
 */
type CreateArticleOptions = Optional<Article, "author" | "date" | "readCount">;

/**
 * 创建文章
 * @param {CreateArticleOptions} article 文章信息
 */
function createArticle(article: CreateArticleOptions) {
  console.log(article.author);
}
